package com.sufen.seckill.controller;


import com.sufen.seckill.pojo.User;
import com.sufen.seckill.service.IOrderService;
import com.sufen.seckill.vo.OrderDetailVo;
import com.sufen.seckill.vo.RespBean;
import com.sufen.seckill.vo.RespBeanEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhoubin
 * @since 2021-10-20
 */
@Controller
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private IOrderService orderService;

    /**
     * 10月24日，41，订单静态化，为的是动静分离，不能用在seckillcontroller里面用model传参
     * 数给thymeleaf这种页面了。要传静态htm给浏览器缓存，动态的就用ajax去请求。实现步骤：复制
     * 一个orderDetail.htm页面，用于作为静态版本的页面。其中，动态数据通过ajax向
     * "/order/detail"接口去请求，这个接口写在orderController里面，返回的是OrderDetailVo对象。
     * 这个对象里有GoodsVo和Order对象，这是由于htm页面里既需要取出商品的id和img、
     * 又需要订单的价格、下单时间、订单状态。。
     * 而这两者需要在OrderServiceImpl里面通过前端传进来的orderId来通过mapper获取。
     * 有了OrderDetailVo对象之后，就好办了，传给前端显示结果就行了。
     * 以此方式（Ajax动态请求接口）实现动态数据的传给前端，而不用model将参数传给thymeleaf，来实现动静分离。
     * ---------------------------------------------------------------------
     * 把model给前端传参的语句全注释了，然后把model传参的所有参数写一个Vo传给前端,
     * 用RespBean.success(obj)传,这样的话,前端能拿到这个obj,也就是order对象,
     * order对象里有所有的数据库的字段的数据,这样前端拿到之后,就能通过他来展示一些信息了.
     * 还能用RespBean的success或error来取出code,如果是200就返回正确结果的页面+obj的数据信息,
     * 如果RespBean的success或error不是200还可以取出code对应的message,
     * 通过前端的layer展示出来.(用于给ajax返回请求的结果实体对象，
     * 其实这个DetailVo里面的参数和之前model传给thymeleaf的是一摸一样的。
     * @param user
     * @param orderId
     * @return
     */

    @RequestMapping("/detail")
    @ResponseBody
    public RespBean detail(User user,Long orderId){
        if(user==null){
            return RespBean.error(RespBeanEnum.User_NULL_ERROR);
        }

        OrderDetailVo orderDetailVo=orderService.detail(orderId);
        return RespBean.success(orderDetailVo);
    }
}
